统计计量 | fect:基于面板数据的因果推断(下)-T218b
The following article is from 连享会 Author 连享会
本文转载自公众号连享会(ID:lianxh_cn)
作者: 曹琳君 (南开大学) ;陈波 (深圳大学)
邮箱:linjuncao@yeah.net ;1900123011@email.szu.edu.cn
Source: Practical Guide to Counterfactual Estimators for Causal Inference with Time-Series Cross-Sectional Data. Working Paper, Stanford University, -PDF-[1]
目录
1.续前集 2.面板数据因果推断的估计量选择 3.面板数据因果推断的基本原理
3.1 潜在的时变混杂因素的检验原理 3.2 安慰剂测试检验原理 4.Stata 演示
4.1 Model Selection 4.2 Uncertainty Estimates 4.3 Wald Test 4.4 Equivalence Test 4.5 PlaceboTest 5.结语 6.致谢 7.参考资料
fect
命令,我们可以生成三个关于面板数据因果推断的统计量:FE 估计、IFE 估计和 MC 估计。通过对比这三个统计量的估计效果,Liu et al. (2019) 发现:与 FE 估计相比,IFE 估计和 MC 估计能对反事实进行更好的预测。
当只有少量时变因素存在并且每个时变因素都表现出相对强的信号时,IFE 估计的表现优于 MC 估计,而当存在大量弱时变因素时,MC 的表现优于 IFEct 。
前提假设:任何预处理期的残差平均值为零,即 for 任一 。 F 统计量构建:(向左滑动查看完整公式)
当观察的样本数量有限时,F 检验的结果不能排除残差平均值为 0 并不代表残差平均值为 0 ,即 F 检验不能提供证据不代表没有证据;
当观察的样本数量很大时,一个小的混杂因素 (或几个离群值) 在因果估计中只会造成可忽略的偏差量,进而导致检验结果在大多数情况下拒绝零值假设。这对于 TSCS 数据分析来说尤其成问题,因为这种情况意味着存在一些不可分解但无影响的时变混杂因素的可能性很高。
前提假设:任何预处理期的残差平均值小于参数 或大于参数 ,即
统计量构建:(向左滑动查看完整公式)
4 Stata演示
kfold
命令设定具体组数,默认组数为 10 ),将每个子集做一次验证集,其余 k-1 组子集作为训练集,得到 k 个模型。这 k 个模型分别在验证集中评估结果,随后所得的误差 MSPE (Mean Squared Prediction Error) 作为交叉验证误差。我们选取 MSPE 最小的模型参数。情形一
method("both")
同时对三种方法的预测情况进行评估。具体命令如下:fect Y, treat(D) unit(id) time(time) cov(X1 X2) method("both") r(4) nlambda(15)
r(4)
表示在 ife
方法中,最多引入四个共同因子。nlambda(15)
表示在 mc
方法中,为参数 lambda()
设定 15 个格数 (默认格数为 10 ) 。ife
方法,此时 MSPE 仅为 4.772 。需要注意的是,在 r = 0 时,ife
方法等价于 fe
。---------------------------------------------------------------------------------
Cross Validation...
fe r=0 force=two-way mspe=8.538
ife r=1 force=two-way mspe=5.437
ife r=2 force=two-way mspe=4.772
ife r=3 force=two-way mspe=5.339
ife r=4 force=two-way mspe=6.146
mc: lambda=.0178 lambda.norm=1 mspe=8.538
mc: lambda=.0105 lambda.norm=.588 mspe=6.98
mc: lambda=.0062 lambda.norm=.346 mspe=5.693
mc: lambda=.0036 lambda.norm=.203 mspe=5.187
mc: lambda=.0021 lambda.norm=.119 mspe=5.272
mc: lambda=.0013 lambda.norm=.07 mspe=5.309
mc: lambda=.0007 lambda.norm=.041 mspe=5.329
mc: lambda=.0004 lambda.norm=.024 mspe=5.391
mc: lambda=.0003 lambda.norm=.014 mspe=5.605
mc: lambda=.0001 lambda.norm=.008 mspe=6.386
mc: lambda=.0001 lambda.norm=.005 mspe=8.408
mc: lambda=.0001 lambda.norm=.003 mspe=8.461
mc: lambda=0 lambda.norm=.002 mspe=8.493
mc: lambda=0 lambda.norm=.001 mspe=8.511
mc: lambda=0 lambda.norm=.001 mspe=8.523
choose fe/ife model with optimal r=2
ife
方法的反事实估计结果:情形二
mc
方法,需要对惩罚项参数 lambda
进行明确设定时,可以在 lambda()
中输入一系列备选参数,通过比较 MSPE 最终选择最后的参数。具体命令如下:. fect Y, treat(D) unit(id) time(time) cov(X1 X2) method("mc") ///
lambda(0.001 0.002 0.003 0.004 0.005)
mc
方法,并引入五个备选参数。交叉验证结果如下所示。根据最小 MSPE 原则,在使用 mc
方法时,我们应该设定 lambda(0.004)
。---------------------------------------------------------------------------------
Cross Validation...
mc: lambda=.001 lambda.norm=.056 mspe=5.315
mc: lambda=.002 lambda.norm=.112 mspe=5.283
mc: lambda=.003 lambda.norm=.168 mspe=5.208
mc: lambda=.004 lambda.norm=.224 mspe=5.202
mc: lambda=.005 lambda.norm=.28 mspe=5.374
optimal lambda=.004 in mc model
mc
方法的反事实估计结果:情形三
ife
或 mc
,直接设定 cv
进行结果。例如当我们选定 ife
方法时,设定最大共同因子数即可。而当选定 mc
方法时,则可以直接运行,因为默认 lambda 的格数为 10 。我们以 ife
方法为例:. fect Y, treat(D) unit(id) time(time) cov(X1 X2) method("ife") r(4) cv cvtreat
cvtreat
将测试集的样本选取限制在处理组。ife
方法。---------------------------------------------------------------------------------
Cross Validation...
fe r=0 force=two-way mspe=8.616
ife r=1 force=two-way mspe=5.736
ife r=2 force=two-way mspe=4.905
ife r=3 force=two-way mspe=5.659
ife r=4 force=two-way mspe=6.661
optimal r=2 in fe/ife model
fect
命令引入了两种方法计算标准差: bootstrap
(默认方法) 和 jackknife
,可以根据 vartype()
具体设定。bootstrap
方法为例:method("ife") r(2) se nboots(100)
nboots(100)
表示抽样 100 次,且不显示抽样点 (如果显示抽样点的话,屏幕中会渐次出现 100 个点,展示抽样进程)。preperiod(-14)
和 offperiod(5)
将绘图的时间窗口限定为处理前的 14 期和处理后的 5 期。还可以根据 xlabel()
和 ylabel()
设定横坐标和纵坐标的标题。最后,我们将标准差的估计方法换为 jackknife
。具体命令如下:method("ife") r(2) se preperiod(-14) offperiod(5) ///
xlabel("s") ylabel("ATTs") vartype("jackknife")
fect
命令引入了拟合优度检验 (Wald Test) 来测度处理前的趋势。我们只需加入 wald
即可。Wald Test 的原假设是:在不同时期内,样本处理前的残差均值都等于零。具体命令如下:method("ife") r(2) preperiod(-14) offperiod(5) ///
wald nboots(100)
preperiod(-14)
和 offperiod(5)
等 options
的功能与前文相似。 wald
表示引入 Wald Test 检验样本处理签的时间趋势。Wald Testing: Already Simulated 100 Times
The p-value in wald test is .91
fect
命令还引入了等效检验 (Equivalence Test) 。该方法主要用于检验处理前 ATTs 的 90% 置信区间是否超过预定范围。fe
方法是否通过等效检验。具体命令如下:method("fe") preperiod(-25) offperiod(0) ///
equiTest nboots(100)
equiTest
即为汇报并图示等效检验结果。Equivalence Test...Fail at s=-25
Equivalence Test...Fail at s=-24
Equivalence Test...Fail at s=-22
Equivalence Test...Fail at s=-21
Equivalence Test...Fail at s=-20
Equivalence Test...Fail at s=-19
Equivalence Test...Fail at s=-16
Equivalence Test...Fail at s=-8
Equivalence Test...Fail at s=-5
Equivalence Test...Fail at s=-3
Equivalence Test...Fail at s=-2
Equivalence Test...Fail at s=-1
Equivalence Test...Fail
fe
方法没有通过等效检验。ife
方法进行等效检验,检验结果显示, ife
方法通过了等效检验 (Pass) 。method("ife") preperiod(-25) offperiod(0) ///
equiTest nboots(100)
Equivalence Test
Equivalence Test...Pass
ife
方法通过了等效检验。mc
方法进行等效检验。检验结果如下。由于我们未设定具体的 lambda ,所以模型会使用默认方法选择合适的 lambda 。最终结果显示, ife
方法通过了等效检验 (Pass) 。method("mc") preperiod(-25) offperiod(0) ///
equiTest nboots(100)
Balanced Panel Data
------------------------------------------------
Cross Validation...
mc: lambda=.0178 lambda.norm=1 mspe=8.538
mc: lambda=.0075 lambda.norm=.422 mspe=6.118
mc: lambda=.0032 lambda.norm=.178 mspe=5.199
mc: lambda=.0013 lambda.norm=.075 mspe=5.307
mc: lambda=.0006 lambda.norm=.032 mspe=5.351
mc: lambda=.0002 lambda.norm=.013 mspe=5.654
mc: lambda=.0001 lambda.norm=.006 mspe=8.389
mc: lambda=0 lambda.norm=.002 mspe=8.475
mc: lambda=0 lambda.norm=.001 mspe=8.511
mc: lambda=0 lambda.norm=0 mspe=8.527
optimal lambda=.003 in mc model
------------------------------------------------
Bootstrapping...
ATT Estimation: Already Bootstrapped 100 Times
------------------------------------------------
Equivalence Test
Equivalence Test...Pass
mc
方法通过了等效检验。fect
命令还提供了安慰剂检验来查看是否存在过拟合问题。具体做法是选定处理前的某一时间段作为”安慰剂周期“,删除该周期后对模型进行拟合,然后检验该时间段内的 ATT 是否显著不为零。一般情况下,我们将处理前的 3 期 [-2, 0] 作为默认的安慰剂周期,也可以使用 palceboperiod()
自定义安慰剂周期。fe
方法进行安慰剂检验。 palceboTest
即为汇报安慰剂检验结果:method("fe") placeboTest nboots(100)
fe
方法未通过安慰剂检验 (Fail) 。Bootstrapping...
ATT Estimation: Already Bootstrapped 100 Times
Placebo Test Fail
fe
方法未通过安慰剂检验。ife
方法进行安慰剂检验。method("ife") r(2) placeboTest nboots(100)
ife
方法通过了安慰剂检验 (Pass) 。Bootstrapping...
ATT Estimation: Already Bootstrapped 100 Times
Placebo Test Pass
ife
方法通过了安慰剂检验。mc
方法进行安慰剂检验:method("mc") lambda(0.004) placeboTest nboots(100)
mc
方法未通过安慰剂检验 (Fail) 。Bootstrapping...
ATT Estimation: Already Bootstrapped 100 Times
Placebo Test Fail
mc
方法未通过安慰剂检验。fect
命令进行面板数据因果推断所涉及的基本原理和具体 Stata 命令。如果想要进一步了解面板数据的因果推断,也可以深入阅读下方的参考资料和相关推文。Licheng Liu, Ye Wang, Yiqing Xu (2019). "Practical Guide to Counterfactual Estimators for Causal Inference with Time-Series Cross-Sectional Data." Working Paper, Stanford University. Available at SSRN: https://papers.ssrn.com/abstract=3555463,详细介绍[2],Github主页[3]
友情链接
-PDF-: https://papers.ssrn.com/abstract=3555463
[2]详细介绍: http://yiqingxu.org/software/fect/stata/fect_md.html
[3]Github主页: https://github.com/arlionn/fect_stata
本文转载自公众号:连享会(ID:lianxh_cn),作者:连享会。
星标⭐我们不迷路!想要文章及时到,文末“在看”少不了!
点击搜索你感兴趣的内容吧
往期推荐
统计计量 | fect:基于面板数据的因果推断(上)-T218a
数据治理 | 数据采集实战:动态网页数据采集
数据资源 | 冬奥火热进行中,企研又双叒叕送数据,体育产业数据等你来拿!
统计计量 | 本周定量原创必读
数据资源 | 喜迎冬奥!免费赠送冰雪产业统计数据!
热点资讯 | 第二轮“双一流”:理论经济学与应用经济学
统计计量 | Stata: 如何检验分组回归后的组间系数差异?
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
推荐 | 彭绮荣
欢迎扫描👇二维码添加关注